# -*- coding: utf-8 -*-
"""
Created on Thu Mar 23 10:18:11 2017

@author: g
"""

import xlrd

'''
简单写法
data=xlrd.open_workbook(r"E:\study\python\测试excel.xls")
table = data.sheets()[0] # 打开第一张表
nrows = table.nrows # 获取表的行数
for i in range(nrows): # 循环逐行打印
    if i == 0: # 跳过第一行
        continue
    print(table.row_values(i)[:13]) # 取前十三列 
'''

import os
import string
import xlrd #导入excel模块
import xlwt

def get_data():
    """获取excel数据源"""
    file = r"E:\study\python\测试excel.xls"           # 改成自己的路径
    filepath = input(u'请将xls文件路径粘贴进去，如果程序里已经指定了文件则按Enter键继续：')
    is_valid = False            # 验证文件
    try:
        filepath = [file, filepath][filepath != ''] #如果输入为空则选用默认路径
        print(filepath)
        # 判断给出的路径是不是xls格式
        if os.path.isfile(filepath):
            filename = os.path.basename(filepath)
            if filename.split('.')[1] == 'xls':
                is_valid = True
        data = None
        if is_valid:
            data = xlrd.open_workbook(filepath)
    except Exception as e:
        print(u'你操作错误：%s' %e)
        return None
    return data
    
    
#根据名称获取Excel表格中的数据   参数:file：Excel文件路径     colnameindex：表头列名所在行的所以  ，by_name：Sheet1名称
def handle_data():
    """处理数据"""
    data = get_data()
    if data:
        col_format = ['B', 'C', 'D']        # 指定的列
        inp = input(u'请选择指定的三列，用逗号分隔，默认的是B,C,D(英文逗号,不区分大小写)，如果选择默认则按Enter键继续:\n')
        try:
            inp = inp.split(',')
            col_format = [col_format,inp][len([i for i in inp if i in string.ascii_letters]) == 3]

            col_format = [i.upper() for i in col_format]                    # 转换成大写
            table = data.sheet_by_index(0)                                  # 选取第一个工作区
            nrows = table.nrows                                             # 行数
            ncols = table.ncols                                             # 列数
            str_upcase = [i for i in string.ascii_uppercase]                      # 所有大写字母
            i_upcase = range(len(str_upcase))                               # 对应的数字
            ncols_dir = dict(zip(str_upcase,i_upcase))                      # 格式成字典
            col_index = [ncols_dir.get(i) for i in col_format]              # 获取指定列所对应的索引

            # 选取的三列是否同时满足 >=1或者同时<=-1
            print (u'正在检索中……')
            count = 0
            result = []
            for i in range(nrows):
                
                cell_0 = table.cell(i,col_index[0]).value
                cell_1 = table.cell(i,col_index[1]).value
                cell_2 = table.cell(i,col_index[2]).value               
#                if (cell_0>=1 and cell_1>=1 and cell_2>=1) or (cell_0<=-1 and cell_1<=-1 and cell_2<=-1):
#                    result.append(table.row_values(i))      # 将符合要求的一行添加进去
#                    count += 1
#                    print (u'断点1……')
            print (u'该文件中共%s行，%s列,其中满足条件的共有%s条数据' %(nrows, ncols, count))
            print (u'正在写入数据……')
            col_name = col_format[0]+col_format[1]+col_format[2]
            if write_data(result, col_name):
                print( u'写入成功！')
        except Exception as e:
            print( u'你操作错误：%s' %e)
            return None
    else:
        print (u'操作失败')
        return None


        
def write_data(data, name):
    """写入数据,data为符合条件的数据列表，name表示指定的哪三个列，以此命名"""
    file = xlwt.Workbook()
    table = file.add_sheet(name,cell_overwrite_ok=True)
    l = 0   # 表示行
    for line in data:
        c = 0   # 表示一行下的列数
        for col in line:
            table.write(l,c,line[c])
            c += 1
        l += 1      
    defatul_f = r"D:\xlrd"       # 默认路径
    f = input(u'请选择保存文件的路径：按回车跳过：')
    f_name = r'\%s.xls' % name
    filepath = [defatul_f+f_name, f+f_name][f != '']
    file.save(filepath)
    return True


    
def main():
    handle_data()

if __name__ == '__main__':
    main()